package org.javaboy.consumer.config;

import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class WebConfig {

    /**
     * 这个就是一个 Http 客户端，我们可以通过它来发送 HTTP 请求
     * @return
     */
    @Bean
    /**
     * 这是一个负载均衡的 RestTemplate，它内部会使用 LoadBalancer 进行负载均衡
     * 默认使用的是轮询算法，我们也可以通过 spring.cloud.loadbalancer.strategy 来指定负载均衡的策略
     * 当添加了 @LoadBalanced 注解之后，那么当 RestTemplate 发起请求的时候，会将这个请求自动拦截下来，
     * 然后利用 discoveryClient 获取服务实例列表，再通过负载均衡算法选择一个服务实例，
     * 然后再通过 LoadBalancerClient 接口来获取一个服务实例，然后发送请求
     */
    @LoadBalanced
    RestTemplate restTemplate(RestTemplateBuilder builder) {
//        return new RestTemplate();
        return builder.build();
    }

}
